let activeEffect = null;  // 当前正在执行的副作用函数

// 模拟响应式对象
class ReactiveEffect {
    constructor(fn) {
        this.fn = fn; // 副作用函数
        this.deps = []; // 存储依赖
    }

    run() {
        activeEffect = this; // 设置当前副作用函数
        this.fn();  // 执行副作用函数
        activeEffect = null; // 恢复
    }

    addDependency(dep) {
        this.deps.push(dep); // 将依赖收集到副作用函数中
    }
}

// 使用 Proxy 代理响应式数据
function reactive(obj) {
    return new Proxy(obj, {
        get(target, prop) {
            if (activeEffect) {
                // 在访问响应式数据时收集依赖
                activeEffect.addDependency(target);
            }
            return target[prop]; // 返回数据
        },
        set(target, prop, value) {
            target[prop] = value;
            // 触发所有依赖更新
            target[prop].forEach(dep => dep.run());
            return true;
        }
    });
}

// 示例：创建响应式对象
const state = reactive({ count: 0 });

// 创建副作用函数
const effect1 = new ReactiveEffect(() => {
    console.log(`Count value is: ${state.count}`);
});

// 运行副作用函数，开始依赖收集
effect1.run();

// 修改 state 的值，会触发副作用函数执行
state.count = 1;  // 输出: Count value is: 1
